import { app, BrowserWindow, screen } from 'electron'
import path from 'path'
import { fileURLToPath } from 'url'
import fs from 'fs'

const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)

// 添加调试日志
console.log('启动Electron应用...')
console.log('当前工作目录:', process.cwd())
console.log('__dirname:', __dirname)

/**
 * 创建主窗口
 */
function createWindow() {
  // 获取屏幕尺寸
  const { width: screenWidth, height: screenHeight } = screen.getPrimaryDisplay().workAreaSize
  
  // 设置固定窗口尺寸 1650×800
  const windowWidth = 1650
  const windowHeight = 800
  
  console.log('屏幕尺寸:', screenWidth, 'x', screenHeight)
  console.log('窗口尺寸:', windowWidth, 'x', windowHeight)

  // 创建浏览器窗口
  const mainWindow = new BrowserWindow({
    width: windowWidth,
    height: windowHeight,
    minWidth: 1400,
    minHeight: 700,
    webPreferences: {
      nodeIntegration: true,
      contextIsolation: false,
      webSecurity: false // 允许加载本地资源
    },
    title: '收益计算器',
    icon: path.join(__dirname, '../public/favicon.ico'),
    center: true,
    show: false, // 先不显示窗口，等内容加载完成后再显示
    backgroundColor: '#ffffff', // 设置背景色为白色，与应用背景色一致
    frame: true, // 保留窗口框架
    autoHideMenuBar: true, // 自动隐藏菜单栏
    useContentSize: true, // 使窗口大小为内容大小
    thickFrame: false, // 使用细边框
  })

  // 根据环境加载页面
  const isDev = process.env.NODE_ENV === 'development'
  console.log('运行环境:', isDev ? '开发环境' : '生产环境')
  
  if (isDev) {
    // 开发环境：加载本地服务器
    const url = 'http://localhost:5174/'
    console.log('加载URL:', url)
    mainWindow.loadURL(url)
    
    // 打开开发者工具
    mainWindow.webContents.openDevTools()
    
    // 监听加载失败事件
    mainWindow.webContents.on('did-fail-load', (event, errorCode, errorDescription) => {
      console.error('页面加载失败:', errorCode, errorDescription)
      console.log('尝试重新加载...')
      setTimeout(() => mainWindow.loadURL(url), 1000)
    })
  } else {
    // 生产环境：加载打包后的文件
    try {
      const indexPath = path.join(__dirname, '../dist/index.html')
      console.log('加载文件:', indexPath)
      
      // 检查文件是否存在
      if (fs.existsSync(indexPath)) {
        mainWindow.loadFile(indexPath)
      } else {
        console.error('找不到文件:', indexPath)
        // 尝试使用相对路径
        const relativePath = './dist/index.html'
        console.log('尝试加载相对路径:', relativePath)
        if (fs.existsSync(relativePath)) {
          mainWindow.loadFile(relativePath)
        } else {
          console.error('找不到文件:', relativePath)
          mainWindow.loadFile(path.join(process.resourcesPath, 'dist/index.html'))
        }
      }
    } catch (error) {
      console.error('加载文件时出错:', error)
    }
  }
  
  // 设置菜单
  mainWindow.setMenu(null)
  
  // 监听窗口准备就绪事件
  mainWindow.webContents.on('did-finish-load', () => {
    console.log('页面加载完成')
    // 调整窗口大小以适应内容
    adjustWindowSize(mainWindow)
  })
  
  // 内容加载完成后显示窗口，避免闪烁
  mainWindow.once('ready-to-show', () => {
    mainWindow.show()
  })
}

/**
 * 调整窗口大小以适应内容
 */
function adjustWindowSize(window) {
  // 执行脚本获取内容尺寸
  window.webContents.executeJavaScript(`
    new Promise((resolve) => {
      // 等待Vue渲染完成
      setTimeout(() => {
        const wrapper = document.querySelector('.calculator-wrapper');
        if (wrapper) {
          const rect = wrapper.getBoundingClientRect();
          resolve({
            width: Math.ceil(rect.width),
            height: Math.ceil(rect.height)
          });
        } else {
          resolve(null);
        }
      }, 500);
    })
  `)
  .then((contentSize) => {
    if (contentSize) {
      console.log('内容尺寸:', contentSize.width, 'x', contentSize.height)
      
      // 使用固定尺寸，不再根据内容调整
      // 保持窗口居中显示
      window.center() // 居中显示
    }
  })
  .catch(err => {
    console.error('调整窗口尺寸失败:', err)
  })
}

// 当Electron完成初始化并准备创建浏览器窗口时调用此方法
app.whenReady().then(() => {
  console.log('Electron已准备就绪')
  createWindow()

  app.on('activate', function () {
    // 在macOS上，当点击dock图标并且没有其他窗口打开时，
    // 通常在应用程序中重新创建一个窗口。
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})

// 当所有窗口关闭时退出应用
app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit()
}) 